package org.wojtas.widok;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;

import org.wojtas.model.Uzytkownik;

import com.vaadin.annotations.PreserveOnRefresh;
import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.server.Page.UriFragmentChangedEvent;
import com.vaadin.server.Page.UriFragmentChangedListener;
import com.vaadin.server.Page;
import com.vaadin.server.ServiceException;
import com.vaadin.server.SessionDestroyEvent;
import com.vaadin.server.SessionDestroyListener;
import com.vaadin.server.SessionInitEvent;
import com.vaadin.server.SessionInitListener;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.AbstractOrderedLayout;
import com.vaadin.ui.HorizontalSplitPanel;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.VerticalSplitPanel;

@SuppressWarnings("serial")
@Theme("sklep")
@PreserveOnRefresh
public class SklepUI extends UI {
	@WebServlet(value = "/*", asyncSupported = true)
	@VaadinServletConfiguration(productionMode = false, ui = SklepUI.class)
	public static class Servlet extends VaadinServlet implements SessionInitListener, SessionDestroyListener {
		@Override
		protected void servletInitialized() throws ServletException {
			super.servletInitialized();
			getService().addSessionInitListener(this);
			getService().addSessionDestroyListener(this);
		}

		@Override
		public void sessionInit(SessionInitEvent event) throws ServiceException {
		}

		@Override
		public void sessionDestroy(SessionDestroyEvent event) {
		}
	}

	private HorizontalSplitPanel panelPionowy;
	private AbstractOrderedLayout layout;

	private Uzytkownik zalogowanyUzytkownik;

	@SuppressWarnings("deprecation")
	@Override
	protected void init(VaadinRequest request) {
		this.setImmediate(true);
		final VerticalSplitPanel panelPoziomy = new VerticalSplitPanel();

		panelPoziomy.setFirstComponent(new GornyPasek());
		panelPoziomy.setSplitPosition(60f, UNITS_PIXELS);
		panelPoziomy.setMinSplitPosition(60f, UNITS_PIXELS);
		panelPoziomy.setMaxSplitPosition(60f, UNITS_PIXELS);

		panelPionowy = new HorizontalSplitPanel();
		layout = new VerticalLayout();
		layout.setMargin(true);
		panelPionowy.setFirstComponent(layout);
		panelPionowy.setSplitPosition(30f);
		panelPionowy.setMinSplitPosition(30f, UNITS_PERCENTAGE);
		panelPoziomy.setSecondComponent(panelPionowy);
		this.setContent(panelPoziomy);

		panelPionowy.setHeight("100%");

		Logowanie lw = new Logowanie(this);
		layout.addComponent(lw);
		layout.addComponent(new MenuGoscia());

		zarzadzajTrescia();

		getPage().addUriFragmentChangedListener(new UriFragmentChangedListener() {
			@Override
			public void uriFragmentChanged(UriFragmentChangedEvent event) {
				zarzadzajTrescia();
			}
		});
	}

	void dodajMenuAdministratora() {
		layout.addComponent(new MenuAdministratora());
	}

	void dodajMenuKlienta() {
		layout.addComponent(new MenuKlienta());
	}

	Uzytkownik getZalogowanyUzytkownik() {
		return zalogowanyUzytkownik;
	}

	void setZalogowanyUzytkownik(Uzytkownik zalogowanyUzytkownik) {
		this.zalogowanyUzytkownik = zalogowanyUzytkownik;
	}

	private void zarzadzajTrescia() {
		String uriFragment = Page.getCurrent().getUriFragment();

		if ("rejestracja".equals(uriFragment)) {
			panelPionowy.setSecondComponent(new RejestracjaUzytkownika());
		} else if ("zarzadzanie_uzytkownikami".equals(uriFragment)) {
			panelPionowy.setSecondComponent(new ZarzadzanieUzytkownikami(zalogowanyUzytkownik));
		} else if ("zarzadzanie_opiniami".equals(uriFragment)) {
			panelPionowy.setSecondComponent(new ZarzadzanieOpiniami(zalogowanyUzytkownik));
		} else if ("zarzadzanie_zamowieniami".equals(uriFragment)) {
			panelPionowy.setSecondComponent(new ZarzadzanieZamowieniami(zalogowanyUzytkownik));
		} else if ("kontakt".equals(uriFragment)) {
			panelPionowy.setSecondComponent(new FormularzKontaktowy());
		} else if ("zamowienie".equals(uriFragment)) {
			panelPionowy.setSecondComponent(new SkladanieZamowienia(zalogowanyUzytkownik));
		} else if ("informacje".equals(uriFragment)) {
			panelPionowy.setSecondComponent(new InformacjeOProdukcie());
		} else if ("opinie".equals(uriFragment)) {
			panelPionowy.setSecondComponent(new OpinieUzytkownikow());
		} else {
			panelPionowy.setSecondComponent(new InformacjeOProdukcie());
		}
	}

}